#include <iostream>
#include <string>
//#include "DiccTrie.h" 
#include "ConjStringTest.h" 
#include "DiccTrieTest.h" 
#include "Multiconjunto.h" 
//#include "ConjString.h" 

#include "Recetario.h"

using namespace std;

int main(){
	string test;
	
    ConjStringTest 	t1;
	t1.StartTest();
	t1.Result();
    system("PAUSE");

	DiccTrieTest 	t2;
	t2.StartTest();
	t2.Result();

    system("PAUSE");
    
	cout << "MULTICONJ::mcrear:" << endl;
		MConj mConj;// = MConj ();	
	cout << "MULTICONJ::MESVACIO:" << endl;
		if(mConj.mEsVacio())
			cout << "el multiconjunto esta vacio"<<endl;
		else
			cout << "no esta funcionand esVacio"<<endl;
			
	cout << "MULTICONJ::AGREGAR:" << endl;

		cout << "defino algunos elementos del multiconjunto:" << endl;	
		cout << "lala" << endl;	
		mConj.mAgregar("lala");
		cout << "lala" << endl;	
		mConj.mAgregar("lala");
		cout << "lele" << endl;
		mConj.mAgregar("lele");
		cout << "hombre" << endl;
		mConj.mAgregar("hombre");
		cout << "mujer" << endl;
		mConj.mAgregar("mujer");
		cout << "hombro" << endl;
		mConj.mAgregar("hombro");
		cout << "mujer" << endl;
		mConj.mAgregar("mujer");
		cout << "hombro" << endl;
		mConj.mAgregar("hombro");
		cout << "h" << endl;
		mConj.mAgregar("h");
		cout << "hijo" << endl;
		mConj.mAgregar("hijo");
		cout << "vemos ahora como quedo el multiconunto:" << endl ;
		cout << mConj << endl;
		
	cout << "MULTICONJ::MAGREGARN:" << endl;
		cout << "agrego 5 pepe" <<endl;
		mConj.mAgregarN("pepe",5);
		cout << "agrego 5 lala" <<endl;
		mConj.mAgregarN("lala",5);
		cout << mConj <<endl<<endl;
	
	cout << "MULTICONJ::MCANTIDAD:" << endl;
		if(mConj.mCantidad("pepe")==5)
			cout << "funciona perfecto" << endl;
		else
			cout << "ERROR: deberian ser 5 y devolvio: " << mConj.mCantidad("pepe") << endl << endl; 
			
	cout << "MULTICONJ::MESVACIO:" << endl;
		if(mConj.mEsVacio())
			cout << "no esta funcionand esVacio detecta que esta vacio cuando no lo esta"<<endl;
		else
			cout << "el multiconjunto tiene elementos"<<endl;

			
	cout << "MULTICONJ::MQUITARUNO:" << endl;
		mConj.mQuitarUno("pepe");
		cout << "pepe =>" << mConj.mCantidad("pepe") << endl;
	cout << "MULTICONJ::MQUITARN:" << endl;
		mConj.mQuitarN("pepe",2);
		cout << "pepe =>" << mConj.mCantidad("pepe")<< endl;
	mConj.mAgregarN("hola",3);
	cout << mConj << endl;
	cout << "MULTICONJ::MELIMINAR:" << endl;
		mConj.mEliminar("pepe");
		if(mConj.mPertenece("pepe"))
			cout << "no se borro" << endl;
		else
			cout << "se borro correctamente" << endl;
	cout << "MULTICONJ::MESVACIO:" << endl;
	cout << "MULTICONJ::MPERTENECE:" << endl;
	cout << "MULTICONJ::MUNION:" << endl;
//	mConj.mUnion(mConj2);
	cout << mConj;
	cout << "MULTICONJ::MTIENETODOS:" << endl;
	
	IteradorMConj it = IteradorMConj(mConj);
	while (it.tieneProximo()) {
		cout << " elemento Mconj: " << it.proximo() << endl;
	}
	IteradorMConj it2 = IteradorMConj(mConj);
	cout << "it2: " << it2.proximo() << endl;
	it = it2;
	cout << "it: " << it.proximo();
	
	Recetario rec = Recetario();
	rec.agregarIngrediente("harina");
	rec.agregarIngrediente("arroz");
	rec.agregarIngrediente("leche");
	rec.agregarIngrediente("huevos");
	rec.agregarIngrediente("aceite");
	rec.agregarIngrediente("fruta");
	rec.agregarIngrediente("verdura");
	
	/** esto no funciona tiene espacios y mayusculas
	MConj ingPlato1 = MConj();
	ingPlato1.mAgregarN("huevos",3);
	ingPlato1.mAgregar("arroz");
	ingPlato1.mAgregar("leche");
	rec.agregarPlato("Revuelto asqueroso", ingPlato1);
	*/
	
	
    return EXIT_SUCCESS;
}
